{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 基本的な探索的データ分析・特徴量作成ならびに学習器作成 01"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 日本語で書きますが、何かおかしな単語・やってること等あればコメント欄にどうぞ。\n",
    "- 改変等は自由にどうぞ。\n",
    "\n",
    "\n",
    "- 2019/09/29 投稿"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. lmport library"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "numpy version: 1.15.4\n",
      "pandas version: 0.24.1\n",
      "seaborn version: 0.9.0\n",
      "matploblib version: 3.0.2\n",
      "lightgbm version: 2.2.1\n",
      "sklearn version: 0.20.2\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "print('numpy version:', np.__version__)\n",
    "import pandas as pd\n",
    "print('pandas version:', pd.__version__)\n",
    "import seaborn as sns\n",
    "print('seaborn version:', sns.__version__)\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "print('matploblib version:', matplotlib.__version__)\n",
    "\n",
    "import lightgbm as lgb\n",
    "print('lightgbm version:', lgb.__version__)\n",
    "\n",
    "from sklearn.metrics import mean_squared_error, roc_auc_score\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "from sklearn.model_selection import train_test_split\n",
    "import sklearn\n",
    "print('sklearn version:', sklearn.__version__)\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings('ignore')\n",
    "\n",
    "import os\n",
    "#print(os.listdir())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Read data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "train = pd.read_csv('train.csv')\n",
    "test = pd.read_csv('test.csv')\n",
    "submit = pd.read_csv('sample_submit.csv', names=('id', 'target'))\n",
    "\n",
    "train = train.rename(columns={'賃料':'target', '契約期間':'Contract', '間取り':'Room', \n",
    "                              '築年数':'Passed', '駐車場':'Parking', '室内設備':'Facility', \n",
    "                              '放送・通信':'Internet', '周辺環境':'Building', '建物構造':'Material', \n",
    "                              '面積':'Area', 'キッチン':'Kitchen', '所在地':'Place',\n",
    "                              'バス・トイレ':'Bath', '所在階':'Floor', 'アクセス':'Access', \n",
    "                              '方角':'Angle'})\n",
    "test = test.rename(columns={'契約期間':'Contract', '間取り':'Room', '築年数':'Passed', \n",
    "                            '駐車場':'Parking', '室内設備':'Facility', '放送・通信':'Internet', \n",
    "                            '周辺環境':'Building', '建物構造':'Material', '面積':'Area', \n",
    "                            'キッチン':'Kitchen', '所在地':'Place', 'バス・トイレ':'Bath', \n",
    "                            '所在階':'Floor', 'アクセス':'Access', '方角':'Angle'})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- グラフの描画等で特徴量に不具合が出る場合がある為、適当な半角文字に直しています。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Basic EDA\n",
    "\n",
    "- ここでは、基本的なEDAを行います。\n",
    "- おそらくですが、ほとんどやってることは大差ない（むしろ少ない）かと思うので、適宜、追加するのが良いかと思います。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>target</th>\n",
       "      <th>Place</th>\n",
       "      <th>Access</th>\n",
       "      <th>Room</th>\n",
       "      <th>Passed</th>\n",
       "      <th>Angle</th>\n",
       "      <th>Area</th>\n",
       "      <th>Floor</th>\n",
       "      <th>Bath</th>\n",
       "      <th>Kitchen</th>\n",
       "      <th>Internet</th>\n",
       "      <th>Facility</th>\n",
       "      <th>Parking</th>\n",
       "      <th>Building</th>\n",
       "      <th>Material</th>\n",
       "      <th>Contract</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>75000</td>\n",
       "      <td>東京都北区滝野川３丁目</td>\n",
       "      <td>都営三田線\\t西巣鴨駅\\t徒歩4分\\t\\t埼京線\\t板橋駅\\t徒歩14分\\t\\t都電荒川線\\...</td>\n",
       "      <td>1K</td>\n",
       "      <td>9年9ヶ月</td>\n",
       "      <td>南東</td>\n",
       "      <td>20.01m2</td>\n",
       "      <td>1階／12階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t浴室乾燥機\\t／\\t温水洗浄便座</td>\n",
       "      <td>ガスコンロ／\\tコンロ2口／\\tシステムキッチン\\t／\\t給湯</td>\n",
       "      <td>インターネット対応／\\tCATV／\\tCSアンテナ／\\tBSアンテナ</td>\n",
       "      <td>エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t室内洗濯機置場／\\t敷...</td>\n",
       "      <td>駐輪場\\t空有</td>\n",
       "      <td>【小学校】 495m\\t【大学】 461m\\t【小学校】 962m\\t【公園】 1103m\\...</td>\n",
       "      <td>RC（鉄筋コンクリート）</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>76000</td>\n",
       "      <td>東京都中央区月島３丁目</td>\n",
       "      <td>都営大江戸線\\t勝どき駅\\t徒歩5分\\t\\t有楽町線\\t月島駅\\t徒歩9分\\t\\t日比谷線\\...</td>\n",
       "      <td>1R</td>\n",
       "      <td>44年10ヶ月</td>\n",
       "      <td>NaN</td>\n",
       "      <td>16.5m2</td>\n",
       "      <td>5階／10階建</td>\n",
       "      <td>専用トイレ／\\tシャワー／\\t温水洗浄便座</td>\n",
       "      <td>ガスコンロ／\\tシステムキッチン\\t／\\t給湯</td>\n",
       "      <td>インターネット対応</td>\n",
       "      <td>エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t室内洗濯機置場／\\t敷...</td>\n",
       "      <td>駐輪場\\t空有\\t駐車場\\t無\\tバイク置き場\\t無</td>\n",
       "      <td>【スーパー】 1283m</td>\n",
       "      <td>鉄骨造</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>110000</td>\n",
       "      <td>東京都渋谷区笹塚２丁目</td>\n",
       "      <td>京王線\\t笹塚駅\\t徒歩6分\\t\\t京王線\\t代田橋駅\\t徒歩7分\\t\\t京王線\\t明大前駅...</td>\n",
       "      <td>1K</td>\n",
       "      <td>8年6ヶ月</td>\n",
       "      <td>南</td>\n",
       "      <td>22.05m2</td>\n",
       "      <td>12階／15階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t浴室乾燥機\\t／\\t温水洗浄...</td>\n",
       "      <td>ガスコンロ／\\tコンロ2口／\\tシステムキッチン\\t／\\t給湯</td>\n",
       "      <td>インターネット対応／\\t光ファイバー／\\tCSアンテナ／\\tBSアンテナ</td>\n",
       "      <td>エアコン付\\tウォークインクローゼット\\tシューズボックス／\\tバルコニー／\\tフローリング...</td>\n",
       "      <td>駐輪場\\t空有\\tバイク置き場\\t空有\\t駐車場\\t近隣\\t30,000円(税込)\\t距離100m</td>\n",
       "      <td>【スーパー】 89m\\t【コンビニ】 184m\\t【コンビニ】 392m\\t【スーパー】 492m</td>\n",
       "      <td>RC（鉄筋コンクリート）</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>150000</td>\n",
       "      <td>東京都杉並区高円寺南２丁目23-2</td>\n",
       "      <td>総武線・中央線（各停）\\t高円寺駅\\t徒歩9分\\t\\t丸ノ内線(池袋－荻窪)\\t新高円寺駅\\...</td>\n",
       "      <td>2LDK</td>\n",
       "      <td>29年4ヶ月</td>\n",
       "      <td>南</td>\n",
       "      <td>60.48m2</td>\n",
       "      <td>3階／4階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t温水洗浄便座／\\t洗面台独立</td>\n",
       "      <td>ガスコンロ／\\t給湯</td>\n",
       "      <td>インターネット対応／\\t光ファイバー</td>\n",
       "      <td>エアコン付\\tシューズボックス／\\tバルコニー／\\t2面採光／\\t室内洗濯機置場／\\tエレベ...</td>\n",
       "      <td>駐車場\\t無\\t駐輪場\\t無\\tバイク置き場\\t無</td>\n",
       "      <td>【スーパー】 225m\\t【スーパー】 448m\\t【スーパー】 619m\\t【スーパー】 ...</td>\n",
       "      <td>RC（鉄筋コンクリート）</td>\n",
       "      <td>2年間\\t※この物件は\\t定期借家\\tです。</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>74000</td>\n",
       "      <td>東京都葛飾区金町３丁目7-2</td>\n",
       "      <td>京成金町線\\t京成金町駅\\t徒歩5分\\t\\t常磐線\\t金町(東京都)駅\\t徒歩7分\\t\\t京...</td>\n",
       "      <td>2DK</td>\n",
       "      <td>31年7ヶ月</td>\n",
       "      <td>南</td>\n",
       "      <td>39.66m2</td>\n",
       "      <td>1階／2階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t追焚機能</td>\n",
       "      <td>給湯／\\t独立キッチン</td>\n",
       "      <td>NaN</td>\n",
       "      <td>バルコニー／\\tフローリング／\\t室内洗濯機置場\\t公営水道／\\t下水</td>\n",
       "      <td>駐車場\\t近隣\\t17,000円(税込)\\t距離300m\\t駐輪場\\t無\\tバイク置き場\\t無</td>\n",
       "      <td>【スーパー】 193m\\t【スーパー】 298m\\t【スーパー】 660m\\t【スーパー】 ...</td>\n",
       "      <td>木造</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>160000</td>\n",
       "      <td>東京都荒川区南千住５丁目</td>\n",
       "      <td>常磐線快速\\t南千住駅\\t徒歩2分\\t\\t都電荒川線\\t三ノ輪橋駅\\t徒歩10分\\t\\t日比...</td>\n",
       "      <td>2LDK</td>\n",
       "      <td>7年6ヶ月</td>\n",
       "      <td>東</td>\n",
       "      <td>50.8m2</td>\n",
       "      <td>6階／12階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t浴室乾燥機\\t／\\t温水洗浄...</td>\n",
       "      <td>ガスコンロ／\\tコンロ3口／\\tシステムキッチン\\t／\\t給湯／\\t独立キッチン</td>\n",
       "      <td>インターネット対応／\\t光ファイバー</td>\n",
       "      <td>エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t24時間換気システム\\...</td>\n",
       "      <td>駐輪場\\t空有\\t駐車場\\t近隣\\t27,000円(税込)\\t距離150m\\tバイク置き場\\t無</td>\n",
       "      <td>【スーパー】 251m\\t【コンビニ】 376m</td>\n",
       "      <td>RC（鉄筋コンクリート）</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>7</td>\n",
       "      <td>78500</td>\n",
       "      <td>東京都練馬区東大泉３丁目</td>\n",
       "      <td>西武池袋線\\t大泉学園駅\\t徒歩4分\\t\\t西武池袋線\\t保谷駅\\t徒歩25分\\t\\t東武東...</td>\n",
       "      <td>1K</td>\n",
       "      <td>10年5ヶ月</td>\n",
       "      <td>南</td>\n",
       "      <td>23.82m2</td>\n",
       "      <td>6階／8階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t追焚機能／\\t浴室乾燥機\\t...</td>\n",
       "      <td>ガスコンロ／\\tコンロ2口／\\tシステムキッチン\\t／\\t給湯</td>\n",
       "      <td>インターネット対応／\\t光ファイバー／\\tCATV／\\tBSアンテナ</td>\n",
       "      <td>エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t24時間換気システム\\...</td>\n",
       "      <td>駐輪場\\t空有\\t駐車場\\t近隣\\t16,000円(税込)\\t距離200m\\tバイク置き場\\t無</td>\n",
       "      <td>【スーパー】 812m\\t【コンビニ】 149m\\t【コンビニ】 942m\\t【スーパー】 ...</td>\n",
       "      <td>RC（鉄筋コンクリート）</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>8</td>\n",
       "      <td>115000</td>\n",
       "      <td>東京都目黒区鷹番１丁目</td>\n",
       "      <td>東急東横線\\t学芸大学駅\\t徒歩7分\\t\\t東急東横線\\t都立大学駅\\t徒歩16分\\t\\t東...</td>\n",
       "      <td>1K</td>\n",
       "      <td>14年4ヶ月</td>\n",
       "      <td>NaN</td>\n",
       "      <td>32.32m2</td>\n",
       "      <td>1階／6階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\t追焚機能／\\t浴室乾燥機\\t／\\t温水洗浄...</td>\n",
       "      <td>ガスコンロ／\\tコンロ2口／\\tシステムキッチン</td>\n",
       "      <td>光ファイバー／\\tCATV／\\tCSアンテナ／\\tBSアンテナ</td>\n",
       "      <td>エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t24時間換気システム\\...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>【スーパー】 334m\\t【スーパー】 562m\\t【スーパー】 694m\\t【コンビニ】 ...</td>\n",
       "      <td>RC（鉄筋コンクリート）</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>9</td>\n",
       "      <td>184327</td>\n",
       "      <td>東京都文京区向丘１丁目</td>\n",
       "      <td>南北線\\t東大前駅\\t徒歩3分\\t\\t都営三田線\\t白山(東京都)駅\\t徒歩10分\\t\\t千...</td>\n",
       "      <td>2DK</td>\n",
       "      <td>44年8ヶ月</td>\n",
       "      <td>北西</td>\n",
       "      <td>65.59m2</td>\n",
       "      <td>4階／9階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\t追焚機能／\\t洗面台独立</td>\n",
       "      <td>ガスコンロ／\\tコンロ3口／\\tシステムキッチン\\t／\\t給湯</td>\n",
       "      <td>NaN</td>\n",
       "      <td>エアコン付\\tバルコニー／\\tフローリング／\\t室内洗濯機置場\\t公営水道／\\t都市ガス</td>\n",
       "      <td>駐車場\\t無</td>\n",
       "      <td>NaN</td>\n",
       "      <td>SRC（鉄骨鉄筋コンクリート）</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>10</td>\n",
       "      <td>76000</td>\n",
       "      <td>東京都板橋区板橋４丁目</td>\n",
       "      <td>埼京線\\t板橋駅\\t徒歩8分\\t\\t都営三田線\\t新板橋駅\\t徒歩4分\\t\\t東武東上線\\t...</td>\n",
       "      <td>1DK</td>\n",
       "      <td>38年9ヶ月</td>\n",
       "      <td>南東</td>\n",
       "      <td>30.3m2</td>\n",
       "      <td>2階／3階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t洗面台独立</td>\n",
       "      <td>ガスコンロ／\\tコンロ2口／\\t給湯</td>\n",
       "      <td>光ファイバー／\\tCATV</td>\n",
       "      <td>エアコン付\\tバルコニー／\\tフローリング／\\t室内洗濯機置場\\t公営水道／\\t都市ガス</td>\n",
       "      <td>駐車場\\t無</td>\n",
       "      <td>NaN</td>\n",
       "      <td>鉄骨造</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id  target              Place  \\\n",
       "0   1   75000        東京都北区滝野川３丁目   \n",
       "1   2   76000        東京都中央区月島３丁目   \n",
       "2   3  110000        東京都渋谷区笹塚２丁目   \n",
       "3   4  150000  東京都杉並区高円寺南２丁目23-2   \n",
       "4   5   74000     東京都葛飾区金町３丁目7-2   \n",
       "5   6  160000       東京都荒川区南千住５丁目   \n",
       "6   7   78500       東京都練馬区東大泉３丁目   \n",
       "7   8  115000        東京都目黒区鷹番１丁目   \n",
       "8   9  184327        東京都文京区向丘１丁目   \n",
       "9  10   76000        東京都板橋区板橋４丁目   \n",
       "\n",
       "                                              Access  Room   Passed Angle  \\\n",
       "0  都営三田線\\t西巣鴨駅\\t徒歩4分\\t\\t埼京線\\t板橋駅\\t徒歩14分\\t\\t都電荒川線\\...    1K    9年9ヶ月    南東   \n",
       "1  都営大江戸線\\t勝どき駅\\t徒歩5分\\t\\t有楽町線\\t月島駅\\t徒歩9分\\t\\t日比谷線\\...    1R  44年10ヶ月   NaN   \n",
       "2  京王線\\t笹塚駅\\t徒歩6分\\t\\t京王線\\t代田橋駅\\t徒歩7分\\t\\t京王線\\t明大前駅...    1K    8年6ヶ月     南   \n",
       "3  総武線・中央線（各停）\\t高円寺駅\\t徒歩9分\\t\\t丸ノ内線(池袋－荻窪)\\t新高円寺駅\\...  2LDK   29年4ヶ月     南   \n",
       "4  京成金町線\\t京成金町駅\\t徒歩5分\\t\\t常磐線\\t金町(東京都)駅\\t徒歩7分\\t\\t京...   2DK   31年7ヶ月     南   \n",
       "5  常磐線快速\\t南千住駅\\t徒歩2分\\t\\t都電荒川線\\t三ノ輪橋駅\\t徒歩10分\\t\\t日比...  2LDK    7年6ヶ月     東   \n",
       "6  西武池袋線\\t大泉学園駅\\t徒歩4分\\t\\t西武池袋線\\t保谷駅\\t徒歩25分\\t\\t東武東...    1K   10年5ヶ月     南   \n",
       "7  東急東横線\\t学芸大学駅\\t徒歩7分\\t\\t東急東横線\\t都立大学駅\\t徒歩16分\\t\\t東...    1K   14年4ヶ月   NaN   \n",
       "8  南北線\\t東大前駅\\t徒歩3分\\t\\t都営三田線\\t白山(東京都)駅\\t徒歩10分\\t\\t千...   2DK   44年8ヶ月    北西   \n",
       "9  埼京線\\t板橋駅\\t徒歩8分\\t\\t都営三田線\\t新板橋駅\\t徒歩4分\\t\\t東武東上線\\t...   1DK   38年9ヶ月    南東   \n",
       "\n",
       "      Area     Floor                                               Bath  \\\n",
       "0  20.01m2   1階／12階建   専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t浴室乾燥機\\t／\\t温水洗浄便座   \n",
       "1   16.5m2   5階／10階建                              専用トイレ／\\tシャワー／\\t温水洗浄便座   \n",
       "2  22.05m2  12階／15階建  専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t浴室乾燥機\\t／\\t温水洗浄...   \n",
       "3  60.48m2    3階／4階建     専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t温水洗浄便座／\\t洗面台独立   \n",
       "4  39.66m2    1階／2階建               専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t追焚機能   \n",
       "5   50.8m2   6階／12階建  専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t浴室乾燥機\\t／\\t温水洗浄...   \n",
       "6  23.82m2    6階／8階建  専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t追焚機能／\\t浴室乾燥機\\t...   \n",
       "7  32.32m2    1階／6階建  専用バス／\\t専用トイレ／\\tバス・トイレ別／\\t追焚機能／\\t浴室乾燥機\\t／\\t温水洗浄...   \n",
       "8  65.59m2    4階／9階建              専用バス／\\t専用トイレ／\\tバス・トイレ別／\\t追焚機能／\\t洗面台独立   \n",
       "9   30.3m2    2階／3階建              専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t洗面台独立   \n",
       "\n",
       "                                    Kitchen  \\\n",
       "0           ガスコンロ／\\tコンロ2口／\\tシステムキッチン\\t／\\t給湯   \n",
       "1                   ガスコンロ／\\tシステムキッチン\\t／\\t給湯   \n",
       "2           ガスコンロ／\\tコンロ2口／\\tシステムキッチン\\t／\\t給湯   \n",
       "3                                ガスコンロ／\\t給湯   \n",
       "4                               給湯／\\t独立キッチン   \n",
       "5  ガスコンロ／\\tコンロ3口／\\tシステムキッチン\\t／\\t給湯／\\t独立キッチン   \n",
       "6           ガスコンロ／\\tコンロ2口／\\tシステムキッチン\\t／\\t給湯   \n",
       "7                  ガスコンロ／\\tコンロ2口／\\tシステムキッチン   \n",
       "8           ガスコンロ／\\tコンロ3口／\\tシステムキッチン\\t／\\t給湯   \n",
       "9                        ガスコンロ／\\tコンロ2口／\\t給湯   \n",
       "\n",
       "                               Internet  \\\n",
       "0    インターネット対応／\\tCATV／\\tCSアンテナ／\\tBSアンテナ   \n",
       "1                             インターネット対応   \n",
       "2  インターネット対応／\\t光ファイバー／\\tCSアンテナ／\\tBSアンテナ   \n",
       "3                    インターネット対応／\\t光ファイバー   \n",
       "4                                   NaN   \n",
       "5                    インターネット対応／\\t光ファイバー   \n",
       "6    インターネット対応／\\t光ファイバー／\\tCATV／\\tBSアンテナ   \n",
       "7       光ファイバー／\\tCATV／\\tCSアンテナ／\\tBSアンテナ   \n",
       "8                                   NaN   \n",
       "9                         光ファイバー／\\tCATV   \n",
       "\n",
       "                                            Facility  \\\n",
       "0  エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t室内洗濯機置場／\\t敷...   \n",
       "1  エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t室内洗濯機置場／\\t敷...   \n",
       "2  エアコン付\\tウォークインクローゼット\\tシューズボックス／\\tバルコニー／\\tフローリング...   \n",
       "3  エアコン付\\tシューズボックス／\\tバルコニー／\\t2面採光／\\t室内洗濯機置場／\\tエレベ...   \n",
       "4                バルコニー／\\tフローリング／\\t室内洗濯機置場\\t公営水道／\\t下水   \n",
       "5  エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t24時間換気システム\\...   \n",
       "6  エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t24時間換気システム\\...   \n",
       "7  エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t24時間換気システム\\...   \n",
       "8       エアコン付\\tバルコニー／\\tフローリング／\\t室内洗濯機置場\\t公営水道／\\t都市ガス   \n",
       "9       エアコン付\\tバルコニー／\\tフローリング／\\t室内洗濯機置場\\t公営水道／\\t都市ガス   \n",
       "\n",
       "                                             Parking  \\\n",
       "0                                            駐輪場\\t空有   \n",
       "1                         駐輪場\\t空有\\t駐車場\\t無\\tバイク置き場\\t無   \n",
       "2  駐輪場\\t空有\\tバイク置き場\\t空有\\t駐車場\\t近隣\\t30,000円(税込)\\t距離100m   \n",
       "3                          駐車場\\t無\\t駐輪場\\t無\\tバイク置き場\\t無   \n",
       "4    駐車場\\t近隣\\t17,000円(税込)\\t距離300m\\t駐輪場\\t無\\tバイク置き場\\t無   \n",
       "5   駐輪場\\t空有\\t駐車場\\t近隣\\t27,000円(税込)\\t距離150m\\tバイク置き場\\t無   \n",
       "6   駐輪場\\t空有\\t駐車場\\t近隣\\t16,000円(税込)\\t距離200m\\tバイク置き場\\t無   \n",
       "7                                                NaN   \n",
       "8                                             駐車場\\t無   \n",
       "9                                             駐車場\\t無   \n",
       "\n",
       "                                            Building         Material  \\\n",
       "0  【小学校】 495m\\t【大学】 461m\\t【小学校】 962m\\t【公園】 1103m\\...     RC（鉄筋コンクリート）   \n",
       "1                                       【スーパー】 1283m              鉄骨造   \n",
       "2  【スーパー】 89m\\t【コンビニ】 184m\\t【コンビニ】 392m\\t【スーパー】 492m     RC（鉄筋コンクリート）   \n",
       "3  【スーパー】 225m\\t【スーパー】 448m\\t【スーパー】 619m\\t【スーパー】 ...     RC（鉄筋コンクリート）   \n",
       "4  【スーパー】 193m\\t【スーパー】 298m\\t【スーパー】 660m\\t【スーパー】 ...               木造   \n",
       "5                           【スーパー】 251m\\t【コンビニ】 376m     RC（鉄筋コンクリート）   \n",
       "6  【スーパー】 812m\\t【コンビニ】 149m\\t【コンビニ】 942m\\t【スーパー】 ...     RC（鉄筋コンクリート）   \n",
       "7  【スーパー】 334m\\t【スーパー】 562m\\t【スーパー】 694m\\t【コンビニ】 ...     RC（鉄筋コンクリート）   \n",
       "8                                                NaN  SRC（鉄骨鉄筋コンクリート）   \n",
       "9                                                NaN              鉄骨造   \n",
       "\n",
       "                 Contract  \n",
       "0                     2年間  \n",
       "1                     2年間  \n",
       "2                     2年間  \n",
       "3  2年間\\t※この物件は\\t定期借家\\tです。  \n",
       "4                     2年間  \n",
       "5                     2年間  \n",
       "6                     2年間  \n",
       "7                     2年間  \n",
       "8                     2年間  \n",
       "9                     2年間  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>Place</th>\n",
       "      <th>Access</th>\n",
       "      <th>Room</th>\n",
       "      <th>Passed</th>\n",
       "      <th>Angle</th>\n",
       "      <th>Area</th>\n",
       "      <th>Floor</th>\n",
       "      <th>Bath</th>\n",
       "      <th>Kitchen</th>\n",
       "      <th>Internet</th>\n",
       "      <th>Facility</th>\n",
       "      <th>Parking</th>\n",
       "      <th>Building</th>\n",
       "      <th>Material</th>\n",
       "      <th>Contract</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>31471</td>\n",
       "      <td>東京都世田谷区深沢５丁目1-27</td>\n",
       "      <td>東急大井町線\\t等々力駅\\t徒歩15分\\t\\t東急田園都市線\\t桜新町駅\\t徒歩24分\\t\\...</td>\n",
       "      <td>2LDK</td>\n",
       "      <td>49年0ヶ月</td>\n",
       "      <td>南</td>\n",
       "      <td>50.22m2</td>\n",
       "      <td>8階／8階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t追焚機能／\\t温水洗浄便座／...</td>\n",
       "      <td>ガスコンロ／\\tコンロ3口／\\tシステムキッチン\\t／\\t給湯／\\tL字キッチン</td>\n",
       "      <td>インターネット対応</td>\n",
       "      <td>エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\tエレベーター\\t公営水...</td>\n",
       "      <td>駐輪場\\t空有\\t駐車場\\t無\\tバイク置き場\\t無</td>\n",
       "      <td>【コンビニ】 74m\\t【スーパー】 215m\\t【病院】 313m\\t【小学校】 219m...</td>\n",
       "      <td>鉄骨造</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>31472</td>\n",
       "      <td>東京都目黒区八雲１丁目11-8</td>\n",
       "      <td>東急東横線\\t都立大学駅\\t徒歩6分\\t\\t東急東横線\\t自由が丘駅\\t徒歩17分\\t\\t東...</td>\n",
       "      <td>1R</td>\n",
       "      <td>0年2ヶ月</td>\n",
       "      <td>南東</td>\n",
       "      <td>20.88m2</td>\n",
       "      <td>3階／4階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t浴室乾燥機\\t／\\t温水洗浄...</td>\n",
       "      <td>ガスコンロ／\\tコンロ2口／\\tシステムキッチン\\t／\\t給湯</td>\n",
       "      <td>インターネット対応／\\tCSアンテナ／\\tBSアンテナ／\\tインターネット使用料無料</td>\n",
       "      <td>エアコン付\\tシューズボックス／\\tフローリング／\\t室内洗濯機置場\\t公営水道／\\t下水／...</td>\n",
       "      <td>駐車場\\t近隣\\t34,000円(税込)\\t距離200m\\t駐輪場\\t無\\tバイク置き場\\t無</td>\n",
       "      <td>【スーパー】 128m\\t【スーパー】 313m\\t【コンビニ】 374m\\t【コンビニ】 ...</td>\n",
       "      <td>RC（鉄筋コンクリート）</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>31473</td>\n",
       "      <td>東京都豊島区池袋本町２丁目22-2</td>\n",
       "      <td>東武東上線\\t北池袋駅\\t徒歩10分\\t\\t埼京線\\t板橋駅\\t徒歩16分\\t\\t山手線\\t...</td>\n",
       "      <td>1K</td>\n",
       "      <td>23年4ヶ月</td>\n",
       "      <td>南東</td>\n",
       "      <td>26.93m2</td>\n",
       "      <td>1階／4階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t温水洗浄便座</td>\n",
       "      <td>ガスコンロ／\\t給湯</td>\n",
       "      <td>インターネット対応／\\t光ファイバー／\\tCATV</td>\n",
       "      <td>エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t2面採光／\\t室内洗濯...</td>\n",
       "      <td>駐車場\\t空有\\t5,000円(税込)\\t(敷金あり\\t1ヶ月)\\t駐輪場\\t空有\\tバイク...</td>\n",
       "      <td>【スーパー】 529m\\t【スーパー】 810m\\t【コンビニ】 316m\\t【コンビニ】 ...</td>\n",
       "      <td>鉄骨造</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>31474</td>\n",
       "      <td>東京都杉並区和泉１丁目</td>\n",
       "      <td>丸ノ内線(中野坂上－方南町)\\t方南町駅\\t徒歩10分\\t\\t京王線\\t代田橋駅\\t徒歩8分...</td>\n",
       "      <td>1K</td>\n",
       "      <td>36年2ヶ月</td>\n",
       "      <td>南東</td>\n",
       "      <td>23.57m2</td>\n",
       "      <td>1階／2階建</td>\n",
       "      <td>シャワー</td>\n",
       "      <td>ガスコンロ／\\t給湯</td>\n",
       "      <td>NaN</td>\n",
       "      <td>エアコン付\\tシューズボックス／\\t2面採光／\\t室外洗濯機置場\\t公営水道／\\t下水／\\t...</td>\n",
       "      <td>駐輪場\\t空有\\t0円</td>\n",
       "      <td>【スーパー】 286m\\t【スーパー】 702m\\t【コンビニ】 489m\\t【コンビニ】 ...</td>\n",
       "      <td>木造</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>31475</td>\n",
       "      <td>東京都杉並区堀ノ内２丁目</td>\n",
       "      <td>丸ノ内線(中野坂上－方南町)\\t方南町駅\\t徒歩12分\\t\\t丸ノ内線(池袋－荻窪)\\t新高...</td>\n",
       "      <td>2LDK</td>\n",
       "      <td>45年4ヶ月</td>\n",
       "      <td>南</td>\n",
       "      <td>50m2</td>\n",
       "      <td>4階／4階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別</td>\n",
       "      <td>コンロ設置可（口数不明）／\\t給湯</td>\n",
       "      <td>インターネット対応</td>\n",
       "      <td>冷房／\\tエアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t室内洗濯機置...</td>\n",
       "      <td>駐車場\\t近隣\\t22,600円\\t距離177m</td>\n",
       "      <td>【コンビニ】 312m\\t【コンビニ】 436m\\t【スーパー】 902m\\t【コンビニ】 ...</td>\n",
       "      <td>RC（鉄筋コンクリート）</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>31476</td>\n",
       "      <td>東京都新宿区西新宿５丁目10-3</td>\n",
       "      <td>都営大江戸線\\t西新宿五丁目駅\\t徒歩4分\\t\\t都営大江戸線\\t都庁前駅\\t徒歩8分\\t\\...</td>\n",
       "      <td>1R</td>\n",
       "      <td>25年6ヶ月</td>\n",
       "      <td>西</td>\n",
       "      <td>21.45m2</td>\n",
       "      <td>1階／2階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tシャワー</td>\n",
       "      <td>ガスコンロ／\\tコンロ1口／\\tシステムキッチン\\t／\\t給湯</td>\n",
       "      <td>インターネット対応／\\t光ファイバー</td>\n",
       "      <td>エアコン付\\tシューズボックス／\\tロフト付き／\\tフローリング／\\t室内洗濯機置場／\\t敷...</td>\n",
       "      <td>駐輪場\\t空有\\t駐車場\\t無\\tバイク置き場\\t無</td>\n",
       "      <td>【コンビニ】 188m\\t【スーパー】 642m\\t【スーパー】 798m\\t【コンビニ】 ...</td>\n",
       "      <td>木造</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>31477</td>\n",
       "      <td>東京都港区芝１丁目</td>\n",
       "      <td>山手線\\t浜松町駅\\t徒歩10分\\t\\t山手線\\t田町(東京都)駅\\t徒歩10分\\t\\t都営...</td>\n",
       "      <td>1K</td>\n",
       "      <td>17年8ヶ月</td>\n",
       "      <td>NaN</td>\n",
       "      <td>19.98m2</td>\n",
       "      <td>3階／8階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t温水洗浄便座</td>\n",
       "      <td>ガスコンロ／\\tコンロ1口／\\t給湯</td>\n",
       "      <td>インターネット対応／\\t光ファイバー／\\tBSアンテナ</td>\n",
       "      <td>エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t室内洗濯機置場／\\t敷...</td>\n",
       "      <td>駐輪場\\t空有\\t駐車場\\t近隣\\t40,000円(税込)\\t距離400m\\tバイク置き場\\t無</td>\n",
       "      <td>【スーパー】 156m\\t【スーパー】 405m\\t【スーパー】 338m\\t【コンビニ】 ...</td>\n",
       "      <td>RC（鉄筋コンクリート）</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>31478</td>\n",
       "      <td>東京都渋谷区本町５丁目</td>\n",
       "      <td>京王新線\\t幡ケ谷駅\\t徒歩11分\\t\\t都営大江戸線\\t西新宿五丁目駅\\t徒歩13分\\t\\...</td>\n",
       "      <td>1R</td>\n",
       "      <td>4年0ヶ月</td>\n",
       "      <td>北</td>\n",
       "      <td>24.44m2</td>\n",
       "      <td>3階／3階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t浴室乾燥機\\t／\\t温水洗浄...</td>\n",
       "      <td>ガスコンロ／\\tコンロ2口／\\tシステムキッチン\\t／\\t給湯</td>\n",
       "      <td>インターネット対応／\\tインターネット使用料無料</td>\n",
       "      <td>エアコン付\\tシューズボックス／\\tフローリング／\\t2面採光／\\t3面採光／\\t室内洗濯機...</td>\n",
       "      <td>NaN</td>\n",
       "      <td>【飲食店】 553m\\t【スーパー】 377m\\t【コンビニ】 192m\\t【コンビニ】 6...</td>\n",
       "      <td>木造</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>31479</td>\n",
       "      <td>東京都葛飾区西新小岩３丁目</td>\n",
       "      <td>総武線・中央線（各停）\\t新小岩駅\\t徒歩18分\\t\\t総武線・中央線（各停）\\t平井(東京...</td>\n",
       "      <td>1R</td>\n",
       "      <td>13年1ヶ月</td>\n",
       "      <td>南</td>\n",
       "      <td>36.32m2</td>\n",
       "      <td>2階／2階建</td>\n",
       "      <td>バス・トイレ別／\\tシャワー／\\t追焚機能／\\t洗面台独立</td>\n",
       "      <td>ガスコンロ／\\tコンロ2口／\\tシステムキッチン\\t／\\tカウンターキッチン\\t／\\t給湯</td>\n",
       "      <td>インターネット対応／\\t光ファイバー／\\tBSアンテナ</td>\n",
       "      <td>エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t室内洗濯機置場／\\t敷...</td>\n",
       "      <td>駐輪場\\t空有\\t駐車場\\t近隣\\t19,000円\\t距離130m\\tバイク置き場\\t無</td>\n",
       "      <td>【スーパー】 822m\\t【スーパー】 561m\\t【コンビニ】 190m\\t【スーパー】 ...</td>\n",
       "      <td>木造</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>31480</td>\n",
       "      <td>東京都杉並区梅里２丁目</td>\n",
       "      <td>丸ノ内線(池袋－荻窪)\\t新高円寺駅\\t徒歩2分\\t\\t中央線（快速）\\t高円寺駅\\t徒歩1...</td>\n",
       "      <td>1DK</td>\n",
       "      <td>13年6ヶ月</td>\n",
       "      <td>東</td>\n",
       "      <td>32.64m2</td>\n",
       "      <td>5階／7階建</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t追焚機能／\\t浴室乾燥機\\t...</td>\n",
       "      <td>ガスコンロ／\\tコンロ2口／\\tシステムキッチン\\t／\\t給湯</td>\n",
       "      <td>光ファイバー／\\tBSアンテナ</td>\n",
       "      <td>冷房／\\tエアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t24時間換気...</td>\n",
       "      <td>駐輪場\\t空有\\t540円\\tバイク置き場\\t空有\\t6,480円</td>\n",
       "      <td>【飲食店】 72m\\t【飲食店】 99m\\t【ドラッグストア】 213m\\t【スーパー】 1...</td>\n",
       "      <td>RC（鉄筋コンクリート）</td>\n",
       "      <td>2年間</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      id              Place  \\\n",
       "0  31471   東京都世田谷区深沢５丁目1-27   \n",
       "1  31472    東京都目黒区八雲１丁目11-8   \n",
       "2  31473  東京都豊島区池袋本町２丁目22-2   \n",
       "3  31474        東京都杉並区和泉１丁目   \n",
       "4  31475       東京都杉並区堀ノ内２丁目   \n",
       "5  31476   東京都新宿区西新宿５丁目10-3   \n",
       "6  31477          東京都港区芝１丁目   \n",
       "7  31478        東京都渋谷区本町５丁目   \n",
       "8  31479      東京都葛飾区西新小岩３丁目   \n",
       "9  31480        東京都杉並区梅里２丁目   \n",
       "\n",
       "                                              Access  Room  Passed Angle  \\\n",
       "0  東急大井町線\\t等々力駅\\t徒歩15分\\t\\t東急田園都市線\\t桜新町駅\\t徒歩24分\\t\\...  2LDK  49年0ヶ月     南   \n",
       "1  東急東横線\\t都立大学駅\\t徒歩6分\\t\\t東急東横線\\t自由が丘駅\\t徒歩17分\\t\\t東...    1R   0年2ヶ月    南東   \n",
       "2  東武東上線\\t北池袋駅\\t徒歩10分\\t\\t埼京線\\t板橋駅\\t徒歩16分\\t\\t山手線\\t...    1K  23年4ヶ月    南東   \n",
       "3  丸ノ内線(中野坂上－方南町)\\t方南町駅\\t徒歩10分\\t\\t京王線\\t代田橋駅\\t徒歩8分...    1K  36年2ヶ月    南東   \n",
       "4  丸ノ内線(中野坂上－方南町)\\t方南町駅\\t徒歩12分\\t\\t丸ノ内線(池袋－荻窪)\\t新高...  2LDK  45年4ヶ月     南   \n",
       "5  都営大江戸線\\t西新宿五丁目駅\\t徒歩4分\\t\\t都営大江戸線\\t都庁前駅\\t徒歩8分\\t\\...    1R  25年6ヶ月     西   \n",
       "6  山手線\\t浜松町駅\\t徒歩10分\\t\\t山手線\\t田町(東京都)駅\\t徒歩10分\\t\\t都営...    1K  17年8ヶ月   NaN   \n",
       "7  京王新線\\t幡ケ谷駅\\t徒歩11分\\t\\t都営大江戸線\\t西新宿五丁目駅\\t徒歩13分\\t\\...    1R   4年0ヶ月     北   \n",
       "8  総武線・中央線（各停）\\t新小岩駅\\t徒歩18分\\t\\t総武線・中央線（各停）\\t平井(東京...    1R  13年1ヶ月     南   \n",
       "9  丸ノ内線(池袋－荻窪)\\t新高円寺駅\\t徒歩2分\\t\\t中央線（快速）\\t高円寺駅\\t徒歩1...   1DK  13年6ヶ月     東   \n",
       "\n",
       "      Area   Floor                                               Bath  \\\n",
       "0  50.22m2  8階／8階建  専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t追焚機能／\\t温水洗浄便座／...   \n",
       "1  20.88m2  3階／4階建  専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t浴室乾燥機\\t／\\t温水洗浄...   \n",
       "2  26.93m2  1階／4階建             専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t温水洗浄便座   \n",
       "3  23.57m2  1階／2階建                                               シャワー   \n",
       "4     50m2  4階／4階建                             専用バス／\\t専用トイレ／\\tバス・トイレ別   \n",
       "5  21.45m2  1階／2階建                                専用バス／\\t専用トイレ／\\tシャワー   \n",
       "6  19.98m2  3階／8階建             専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t温水洗浄便座   \n",
       "7  24.44m2  3階／3階建  専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t浴室乾燥機\\t／\\t温水洗浄...   \n",
       "8  36.32m2  2階／2階建                      バス・トイレ別／\\tシャワー／\\t追焚機能／\\t洗面台独立   \n",
       "9  32.64m2  5階／7階建  専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t追焚機能／\\t浴室乾燥機\\t...   \n",
       "\n",
       "                                         Kitchen  \\\n",
       "0       ガスコンロ／\\tコンロ3口／\\tシステムキッチン\\t／\\t給湯／\\tL字キッチン   \n",
       "1                ガスコンロ／\\tコンロ2口／\\tシステムキッチン\\t／\\t給湯   \n",
       "2                                     ガスコンロ／\\t給湯   \n",
       "3                                     ガスコンロ／\\t給湯   \n",
       "4                              コンロ設置可（口数不明）／\\t給湯   \n",
       "5                ガスコンロ／\\tコンロ1口／\\tシステムキッチン\\t／\\t給湯   \n",
       "6                             ガスコンロ／\\tコンロ1口／\\t給湯   \n",
       "7                ガスコンロ／\\tコンロ2口／\\tシステムキッチン\\t／\\t給湯   \n",
       "8  ガスコンロ／\\tコンロ2口／\\tシステムキッチン\\t／\\tカウンターキッチン\\t／\\t給湯   \n",
       "9                ガスコンロ／\\tコンロ2口／\\tシステムキッチン\\t／\\t給湯   \n",
       "\n",
       "                                     Internet  \\\n",
       "0                                   インターネット対応   \n",
       "1  インターネット対応／\\tCSアンテナ／\\tBSアンテナ／\\tインターネット使用料無料   \n",
       "2                   インターネット対応／\\t光ファイバー／\\tCATV   \n",
       "3                                         NaN   \n",
       "4                                   インターネット対応   \n",
       "5                          インターネット対応／\\t光ファイバー   \n",
       "6                 インターネット対応／\\t光ファイバー／\\tBSアンテナ   \n",
       "7                    インターネット対応／\\tインターネット使用料無料   \n",
       "8                 インターネット対応／\\t光ファイバー／\\tBSアンテナ   \n",
       "9                             光ファイバー／\\tBSアンテナ   \n",
       "\n",
       "                                            Facility  \\\n",
       "0  エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\tエレベーター\\t公営水...   \n",
       "1  エアコン付\\tシューズボックス／\\tフローリング／\\t室内洗濯機置場\\t公営水道／\\t下水／...   \n",
       "2  エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t2面採光／\\t室内洗濯...   \n",
       "3  エアコン付\\tシューズボックス／\\t2面採光／\\t室外洗濯機置場\\t公営水道／\\t下水／\\t...   \n",
       "4  冷房／\\tエアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t室内洗濯機置...   \n",
       "5  エアコン付\\tシューズボックス／\\tロフト付き／\\tフローリング／\\t室内洗濯機置場／\\t敷...   \n",
       "6  エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t室内洗濯機置場／\\t敷...   \n",
       "7  エアコン付\\tシューズボックス／\\tフローリング／\\t2面採光／\\t3面採光／\\t室内洗濯機...   \n",
       "8  エアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t室内洗濯機置場／\\t敷...   \n",
       "9  冷房／\\tエアコン付\\tシューズボックス／\\tバルコニー／\\tフローリング／\\t24時間換気...   \n",
       "\n",
       "                                             Parking  \\\n",
       "0                         駐輪場\\t空有\\t駐車場\\t無\\tバイク置き場\\t無   \n",
       "1    駐車場\\t近隣\\t34,000円(税込)\\t距離200m\\t駐輪場\\t無\\tバイク置き場\\t無   \n",
       "2  駐車場\\t空有\\t5,000円(税込)\\t(敷金あり\\t1ヶ月)\\t駐輪場\\t空有\\tバイク...   \n",
       "3                                        駐輪場\\t空有\\t0円   \n",
       "4                           駐車場\\t近隣\\t22,600円\\t距離177m   \n",
       "5                         駐輪場\\t空有\\t駐車場\\t無\\tバイク置き場\\t無   \n",
       "6   駐輪場\\t空有\\t駐車場\\t近隣\\t40,000円(税込)\\t距離400m\\tバイク置き場\\t無   \n",
       "7                                                NaN   \n",
       "8       駐輪場\\t空有\\t駐車場\\t近隣\\t19,000円\\t距離130m\\tバイク置き場\\t無   \n",
       "9                  駐輪場\\t空有\\t540円\\tバイク置き場\\t空有\\t6,480円   \n",
       "\n",
       "                                            Building      Material Contract  \n",
       "0  【コンビニ】 74m\\t【スーパー】 215m\\t【病院】 313m\\t【小学校】 219m...           鉄骨造      NaN  \n",
       "1  【スーパー】 128m\\t【スーパー】 313m\\t【コンビニ】 374m\\t【コンビニ】 ...  RC（鉄筋コンクリート）      2年間  \n",
       "2  【スーパー】 529m\\t【スーパー】 810m\\t【コンビニ】 316m\\t【コンビニ】 ...           鉄骨造      2年間  \n",
       "3  【スーパー】 286m\\t【スーパー】 702m\\t【コンビニ】 489m\\t【コンビニ】 ...            木造      2年間  \n",
       "4  【コンビニ】 312m\\t【コンビニ】 436m\\t【スーパー】 902m\\t【コンビニ】 ...  RC（鉄筋コンクリート）      2年間  \n",
       "5  【コンビニ】 188m\\t【スーパー】 642m\\t【スーパー】 798m\\t【コンビニ】 ...            木造      2年間  \n",
       "6  【スーパー】 156m\\t【スーパー】 405m\\t【スーパー】 338m\\t【コンビニ】 ...  RC（鉄筋コンクリート）      2年間  \n",
       "7  【飲食店】 553m\\t【スーパー】 377m\\t【コンビニ】 192m\\t【コンビニ】 6...            木造      2年間  \n",
       "8  【スーパー】 822m\\t【スーパー】 561m\\t【コンビニ】 190m\\t【スーパー】 ...            木造      2年間  \n",
       "9  【飲食店】 72m\\t【飲食店】 99m\\t【ドラッグストア】 213m\\t【スーパー】 1...  RC（鉄筋コンクリート）      2年間  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 31470 entries, 0 to 31469\n",
      "Data columns (total 17 columns):\n",
      "id          31470 non-null int64\n",
      "target      31470 non-null int64\n",
      "Place       31470 non-null object\n",
      "Access      31470 non-null object\n",
      "Room        31470 non-null object\n",
      "Passed      31470 non-null object\n",
      "Angle       28721 non-null object\n",
      "Area        31470 non-null object\n",
      "Floor       31470 non-null object\n",
      "Bath        31141 non-null object\n",
      "Kitchen     30849 non-null object\n",
      "Internet    28030 non-null object\n",
      "Facility    31388 non-null object\n",
      "Parking     26183 non-null object\n",
      "Building    22038 non-null object\n",
      "Material    31470 non-null object\n",
      "Contract    24350 non-null object\n",
      "dtypes: int64(2), object(15)\n",
      "memory usage: 4.1+ MB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 31262 entries, 0 to 31261\n",
      "Data columns (total 16 columns):\n",
      "id          31262 non-null int64\n",
      "Place       31262 non-null object\n",
      "Access      31262 non-null object\n",
      "Room        31262 non-null object\n",
      "Passed      31262 non-null object\n",
      "Angle       28454 non-null object\n",
      "Area        31262 non-null object\n",
      "Floor       31261 non-null object\n",
      "Bath        30942 non-null object\n",
      "Kitchen     30627 non-null object\n",
      "Internet    27808 non-null object\n",
      "Facility    31189 non-null object\n",
      "Parking     25906 non-null object\n",
      "Building    22021 non-null object\n",
      "Material    31262 non-null object\n",
      "Contract    24281 non-null object\n",
      "dtypes: int64(1), object(15)\n",
      "memory usage: 3.8+ MB\n"
     ]
    }
   ],
   "source": [
    "test.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 情報のほとんどが取得したままのような形で、前処理が必要そうです。\n",
    "    - split(区、/t, ／等）が役に立ちそうです。\n",
    "- 一部にNanがあるため、何らかの対応を行う余地があると思います。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3-1. 賃料（target）について"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>31470.000000</td>\n",
       "      <td>3.147000e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>15735.500000</td>\n",
       "      <td>1.182903e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>9084.750822</td>\n",
       "      <td>7.374880e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>2.500000e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>7868.250000</td>\n",
       "      <td>7.600000e+04</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>15735.500000</td>\n",
       "      <td>1.020000e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>23602.750000</td>\n",
       "      <td>1.360000e+05</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>31470.000000</td>\n",
       "      <td>2.500000e+06</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 id        target\n",
       "count  31470.000000  3.147000e+04\n",
       "mean   15735.500000  1.182903e+05\n",
       "std     9084.750822  7.374880e+04\n",
       "min        1.000000  2.500000e+04\n",
       "25%     7868.250000  7.600000e+04\n",
       "50%    15735.500000  1.020000e+05\n",
       "75%    23602.750000  1.360000e+05\n",
       "max    31470.000000  2.500000e+06"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- trainとtestの分布が異なってなければ、予測値の平均は1.18e+05程度になるはずです。\n",
    "- 賃料250万円が最大ですが、分布はどうなっているでしょうか。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1ec3e861f98>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.distplot(train['target'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 賃料250万円はtypoの可能性があります。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5093     2500000\n",
       "20643    1800000\n",
       "30539    1660000\n",
       "1771     1450000\n",
       "8706     1390000\n",
       "9008     1300000\n",
       "20989    1300000\n",
       "15417    1300000\n",
       "5775     1203500\n",
       "1501     1200000\n",
       "Name: target, dtype: int64"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['target'].sort_values(ascending=False).head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>target</th>\n",
       "      <th>Place</th>\n",
       "      <th>Access</th>\n",
       "      <th>Room</th>\n",
       "      <th>Passed</th>\n",
       "      <th>Angle</th>\n",
       "      <th>Area</th>\n",
       "      <th>Floor</th>\n",
       "      <th>Bath</th>\n",
       "      <th>Kitchen</th>\n",
       "      <th>Internet</th>\n",
       "      <th>Facility</th>\n",
       "      <th>Parking</th>\n",
       "      <th>Building</th>\n",
       "      <th>Material</th>\n",
       "      <th>Contract</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>5093</th>\n",
       "      <td>5094</td>\n",
       "      <td>2500000</td>\n",
       "      <td>東京都港区三田２丁目4-3</td>\n",
       "      <td>南北線\\t麻布十番駅\\t徒歩8分\\t\\t都営大江戸線\\t赤羽橋駅\\t徒歩9分\\t\\t山手線\\...</td>\n",
       "      <td>2LDK+S(納戸)</td>\n",
       "      <td>1年8ヶ月</td>\n",
       "      <td>西</td>\n",
       "      <td>217.29m2</td>\n",
       "      <td>9階／9階建（地下2階）</td>\n",
       "      <td>専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t追焚機能／\\t浴室乾燥機\\t...</td>\n",
       "      <td>IHコンロ\\t／\\tコンロ3口／\\tシステムキッチン\\t／\\tカウンターキッチン\\t／\\tL...</td>\n",
       "      <td>インターネット対応</td>\n",
       "      <td>エアコン付／\\t床暖房\\tウォークインクローゼット\\tシューズボックス／\\tバルコニー／\\t...</td>\n",
       "      <td>駐車場\\t空有(43台)\\t48,600円</td>\n",
       "      <td>【飲食店】 959m\\t【飲食店】 611m\\t【スーパー】 417m\\t【スーパー】 65...</td>\n",
       "      <td>RC（鉄筋コンクリート）</td>\n",
       "      <td>3年間\\t※この物件は\\t定期借家\\tです。</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "        id   target          Place  \\\n",
       "5093  5094  2500000  東京都港区三田２丁目4-3   \n",
       "\n",
       "                                                 Access        Room Passed  \\\n",
       "5093  南北線\\t麻布十番駅\\t徒歩8分\\t\\t都営大江戸線\\t赤羽橋駅\\t徒歩9分\\t\\t山手線\\...  2LDK+S(納戸)  1年8ヶ月   \n",
       "\n",
       "     Angle      Area         Floor  \\\n",
       "5093     西  217.29m2  9階／9階建（地下2階）   \n",
       "\n",
       "                                                   Bath  \\\n",
       "5093  専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t追焚機能／\\t浴室乾燥機\\t...   \n",
       "\n",
       "                                                Kitchen   Internet  \\\n",
       "5093  IHコンロ\\t／\\tコンロ3口／\\tシステムキッチン\\t／\\tカウンターキッチン\\t／\\tL...  インターネット対応   \n",
       "\n",
       "                                               Facility  \\\n",
       "5093  エアコン付／\\t床暖房\\tウォークインクローゼット\\tシューズボックス／\\tバルコニー／\\t...   \n",
       "\n",
       "                    Parking  \\\n",
       "5093  駐車場\\t空有(43台)\\t48,600円   \n",
       "\n",
       "                                               Building      Material  \\\n",
       "5093  【飲食店】 959m\\t【飲食店】 611m\\t【スーパー】 417m\\t【スーパー】 65...  RC（鉄筋コンクリート）   \n",
       "\n",
       "                    Contract  \n",
       "5093  3年間\\t※この物件は\\t定期借家\\tです。  "
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train[train['target']==2500000]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 高級賃貸っぽいく、typoではないと思われます。\n",
    "    - ただし、外れ値ではあるので、何らかの処置をしても良いかもしれません。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3-2. 所在地（Access）について"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "東京都板橋区板橋３丁目1-8         54\n",
       "東京都世田谷区太子堂２丁目          53\n",
       "東京都足立区新田１丁目            47\n",
       "東京都中野区白鷺２丁目1-21        45\n",
       "東京都中央区日本橋馬喰町２丁目4-12    44\n",
       "東京都豊島区池袋３丁目            43\n",
       "東京都豊島区東池袋２丁目           40\n",
       "東京都墨田区緑４丁目             39\n",
       "東京都豊島区南長崎５丁目           38\n",
       "東京都中野区江古田３丁目14-3       38\n",
       "Name: Place, dtype: int64"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['Place'].value_counts().head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "東京都江戸川区松島２丁目8-13     1\n",
       "東京都足立区西新井２丁目1-1      1\n",
       "東京都大田区西糀谷１丁目11-12    1\n",
       "東京都品川区大井１丁目54-3      1\n",
       "東京都江東区白河３丁目8-15      1\n",
       "東京都文京区本駒込１丁目25-28    1\n",
       "東京都豊島区要町３丁目58-5      1\n",
       "東京都足立区関原１丁目２０－４      1\n",
       "東京都板橋区東山町31-11       1\n",
       "東京都中野区本町６丁目12-12     1\n",
       "Name: Place, dtype: int64"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['Place'].value_counts().tail(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "東京都世田谷区太子堂２丁目          53\n",
       "東京都板橋区板橋３丁目1-8         48\n",
       "東京都中野区白鷺２丁目1-21        47\n",
       "東京都豊島区南長崎５丁目           47\n",
       "東京都中央区勝どき６丁目           42\n",
       "東京都中央区日本橋馬喰町２丁目        41\n",
       "東京都江戸川区鹿骨５丁目           40\n",
       "東京都板橋区高島平１丁目           40\n",
       "東京都江東区海辺               39\n",
       "東京都中央区日本橋馬喰町２丁目4-12    37\n",
       "Name: Place, dtype: int64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test['Place'].value_counts().head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 都、区、数字・丁目、（番地）で区切れると思います。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3-3. アクセス（Access）について"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "都営大江戸線\\t新江古田駅\\t徒歩10分\\t\\t西武池袋線\\t江古田駅\\t徒歩20分\\t\\t西武新宿線\\t沼袋駅\\t徒歩15分           65\n",
       "総武本線\\t馬喰町駅\\t徒歩4分\\t\\t都営浅草線\\t浅草橋駅\\t徒歩4分                                     61\n",
       "都営三田線\\t板橋区役所前駅\\t徒歩5分\\t\\t東武東上線\\t下板橋駅\\t徒歩7分\\t\\t都営三田線\\t新板橋駅\\t徒歩8分            49\n",
       "東西線\\t木場(東京都)駅\\t徒歩5分\\t\\t都営大江戸線\\t門前仲町駅\\t徒歩15分\\t\\t京葉線(東京－蘇我)\\t越中島駅\\t徒歩17分    48\n",
       "西武新宿線\\t鷺ノ宮駅\\t徒歩8分\\t\\t西武新宿線\\t都立家政駅\\t徒歩14分\\t\\t西武新宿線\\t下井草駅\\t徒歩20分            45\n",
       "総武本線\\t馬喰町駅\\t徒歩4分\\t\\t総武線・中央線（各停）\\t浅草橋駅\\t徒歩4分\\t\\t都営新宿線\\t馬喰横山駅\\t徒歩8分         44\n",
       "都営大江戸線\\t勝どき駅\\t徒歩5分\\t\\t有楽町線\\t月島駅\\t徒歩14分\\t\\t日比谷線\\t築地駅\\t徒歩21分                36\n",
       "有楽町線\\t新富町(東京都)駅\\t徒歩3分\\t\\t日比谷線\\t八丁堀(東京都)駅\\t徒歩4分\\t\\t日比谷線\\t築地駅\\t徒歩5分         30\n",
       "都営新宿線\\t住吉(東京都)駅\\t徒歩7分\\t\\t都営新宿線\\t西大島駅\\t徒歩19分\\t\\t都営新宿線\\t菊川(東京都)駅\\t徒歩20分     29\n",
       "ゆりかもめ\\t芝浦ふ頭駅\\t徒歩2分\\t\\t山手線\\t田町(東京都)駅\\t徒歩15分\\t\\t都営三田線\\t三田(東京都)駅\\t徒歩19分      29\n",
       "Name: Access, dtype: int64"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['Access'].value_counts().head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "京浜東北線\\t大森(東京都)駅\\t徒歩20分\\t\\t京急本線\\t大森町駅\\t徒歩14分\\t\\t京急本線\\t平和島駅\\t徒歩12分                      1\n",
       "東急東横線\\t自由が丘駅\\t徒歩7分\\t\\t東急目黒線\\t奥沢駅\\t徒歩2分\\t\\t東急東横線\\t田園調布駅\\t徒歩14分                         1\n",
       "都営新宿線\\t一之江駅\\t徒歩11分\\t\\t都営新宿線\\t瑞江駅\\t徒歩18分\\t\\t総武線・中央線（各停）\\t新小岩駅\\t/バス(31分)一之江二丁目下車徒歩5分    1\n",
       "南北線\\t王子神谷駅\\t徒歩6分\\t\\t京浜東北線\\t東十条駅\\t徒歩10分\\t\\t埼京線\\t十条(東京都)駅\\t徒歩15分                        1\n",
       "京浜東北線\\t赤羽駅\\t徒歩19分\\t\\t埼京線\\t北赤羽駅\\t徒歩8分\\t\\t都営三田線\\t志村坂上駅\\t徒歩18分                           1\n",
       "総武線・中央線（各停）\\t市ケ谷駅\\t徒歩5分\\t\\t有楽町線\\t市ケ谷駅\\t徒歩5分\\t\\t南北線\\t市ケ谷駅\\t徒歩5分                        1\n",
       "京王線\\t明大前駅\\t徒歩5分\\t\\t京王線\\t代田橋駅\\t徒歩10分\\t\\t京王井の頭線\\t永福町駅\\t徒歩13分                            1\n",
       "都営新宿線\\t篠崎駅\\t徒歩5分\\t\\t都営新宿線\\t瑞江駅\\t徒歩24分\\t\\t都営新宿線\\t一之江駅\\t徒歩43分                           1\n",
       "丸ノ内線(池袋－荻窪)\\t御茶ノ水駅\\t徒歩7分\\t\\t千代田線\\t湯島駅\\t徒歩7分\\t\\t山手線\\t上野駅\\t徒歩14分                        1\n",
       "東急多摩川線\\t下丸子駅\\t徒歩4分\\t\\t東急池上線\\t千鳥町駅\\t徒歩10分\\t\\t東急多摩川線\\t鵜の木駅\\t徒歩4分                        1\n",
       "Name: Access, dtype: int64"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['Access'].value_counts().tail(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "都営大江戸線\\t新江古田駅\\t徒歩10分\\t\\t西武池袋線\\t江古田駅\\t徒歩20分\\t\\t西武新宿線\\t沼袋駅\\t徒歩15分           66\n",
       "西武新宿線\\t鷺ノ宮駅\\t徒歩8分\\t\\t西武新宿線\\t都立家政駅\\t徒歩14分\\t\\t西武新宿線\\t下井草駅\\t徒歩20分            47\n",
       "総武本線\\t馬喰町駅\\t徒歩4分\\t\\t都営浅草線\\t浅草橋駅\\t徒歩4分                                     46\n",
       "都営大江戸線\\t勝どき駅\\t徒歩5分\\t\\t有楽町線\\t月島駅\\t徒歩14分\\t\\t日比谷線\\t築地駅\\t徒歩21分                46\n",
       "都営三田線\\t板橋区役所前駅\\t徒歩5分\\t\\t東武東上線\\t下板橋駅\\t徒歩7分\\t\\t都営三田線\\t新板橋駅\\t徒歩8分            44\n",
       "東西線\\t木場(東京都)駅\\t徒歩5分\\t\\t都営大江戸線\\t門前仲町駅\\t徒歩15分\\t\\t京葉線(東京－蘇我)\\t越中島駅\\t徒歩17分    39\n",
       "総武本線\\t馬喰町駅\\t徒歩4分\\t\\t総武線・中央線（各停）\\t浅草橋駅\\t徒歩4分\\t\\t都営新宿線\\t馬喰横山駅\\t徒歩8分         37\n",
       "都営大江戸線\\t新御徒町駅\\t徒歩7分\\t\\t銀座線\\t稲荷町(東京都)駅\\t徒歩7分\\t\\t銀座線\\t田原町(東京都)駅\\t徒歩8分       29\n",
       "ゆりかもめ\\t芝浦ふ頭駅\\t徒歩2分\\t\\t山手線\\t田町(東京都)駅\\t徒歩15分\\t\\t都営三田線\\t三田(東京都)駅\\t徒歩19分      29\n",
       "西武池袋線\\t東長崎駅\\t徒歩1分\\t\\t都営大江戸線\\t落合南長崎駅\\t徒歩9分                                 29\n",
       "Name: Access, dtype: int64"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test['Access'].value_counts().head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- \\t, \\t\\tで区切れると思います。\n",
    "- ただし、区切った後の個数はバラバラなので要注意です。\n",
    "    - 路線・駅・駅からの移動時間が最大3セット。\n",
    "    - 徒歩～分ではなく、バスの場合有り。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3-4. 築年数（Passed）について"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0年1ヶ月     983\n",
       "新築        889\n",
       "0年0ヶ月     704\n",
       "0年2ヶ月     644\n",
       "0年3ヶ月     508\n",
       "0年5ヶ月     484\n",
       "0年6ヶ月     378\n",
       "0年4ヶ月     323\n",
       "12年5ヶ月    262\n",
       "11年5ヶ月    227\n",
       "Name: Passed, dtype: int64"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['Passed'].value_counts().head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "79年7ヶ月      1\n",
       "57年5ヶ月      1\n",
       "56年10ヶ月     1\n",
       "58年11ヶ月     1\n",
       "64年7ヶ月      1\n",
       "52年0ヶ月      1\n",
       "1019年7ヶ月    1\n",
       "69年7ヶ月      1\n",
       "53年10ヶ月     1\n",
       "59年8ヶ月      1\n",
       "Name: Passed, dtype: int64"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['Passed'].value_counts().tail(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 年、ヶ月で区切れます。\n",
    "- ただし、例外として、新築と0年0ヶ月の違いは？\n",
    "- 520年5ヶ月は多分typoです（既にフォーラムにその旨あり）。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3-5. 方角（Angle）について"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "南     8909\n",
       "東     4995\n",
       "西     4026\n",
       "南東    3098\n",
       "南西    3080\n",
       "北     1966\n",
       "北西    1326\n",
       "北東    1321\n",
       "Name: Angle, dtype: int64"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['Angle'].value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 処置の必要はなさそうです。\n",
    "- 日当たりが良い南方面が多く、日当たりが悪い北方面が少ないという知識に合います。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3-6. 面積（Area）について"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "20m2       226\n",
       "40m2       209\n",
       "18m2       188\n",
       "21m2       169\n",
       "30m2       164\n",
       "25m2       143\n",
       "16m2       121\n",
       "22m2       117\n",
       "15m2       111\n",
       "19.87m2    110\n",
       "Name: Area, dtype: int64"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['Area'].value_counts().head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "63.83m2    1\n",
       "35.88m2    1\n",
       "17.44m2    1\n",
       "59.14m2    1\n",
       "72.67m2    1\n",
       "6.45m2     1\n",
       "12.26m2    1\n",
       "69.03m2    1\n",
       "19.23m2    1\n",
       "51.96m2    1\n",
       "Name: Area, dtype: int64"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['Area'].value_counts().tail(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- :-2で取り出せそうです。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3-7. バス・トイレ（Bath）について"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t追焚機能／\\t浴室乾燥機\\t／\\t温水洗浄便座／\\t洗面台独立／\\t脱衣所    4606\n",
       "専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t浴室乾燥機\\t／\\t温水洗浄便座／\\t洗面台独立／\\t脱衣所           2936\n",
       "専用バス／\\t専用トイレ／\\tシャワー                                                      2133\n",
       "専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー                                            1495\n",
       "専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t追焚機能／\\t浴室乾燥機\\t／\\t温水洗浄便座／\\t洗面台独立           873\n",
       "シャワー                                                                      849\n",
       "専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t洗面台独立／\\t脱衣所                               802\n",
       "バス・トイレ別／\\tシャワー／\\t追焚機能／\\t浴室乾燥機\\t／\\t温水洗浄便座／\\t洗面台独立                          795\n",
       "専用バス／\\t専用トイレ／\\tバス・トイレ別／\\tシャワー／\\t浴室乾燥機\\t／\\t温水洗浄便座／\\t洗面台独立                  708\n",
       "バス・トイレ別／\\tシャワー                                                            656\n",
       "Name: Bath, dtype: int64"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['Bath'].value_counts().head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- \\t,／\\tで区切れそうです。\n",
    "- ただし、出てくる属性数はバラバラなので要注意です。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3-8. 周辺環境（Building）について"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "【スーパー】 264m\\t【スーパー】 848m\\t【スーパー】 969m\\t【コンビニ】 191m\\t【コンビニ】 378m                  48\n",
       "【スーパー】 227m\\t【スーパー】 442m\\t【スーパー】 422m\\t【コンビニ】 260m\\t【コンビニ】 320m                  47\n",
       "【スーパー】 231m\\t【スーパー】 309m\\t【スーパー】 593m\\t【コンビニ】 103m\\t【コンビニ】 389m                  44\n",
       "【スーパー】 292m\\t【コンビニ】 341m                                                         40\n",
       "【スーパー】 501m\\t【スーパー】 924m\\t【スーパー】 713m\\t【コンビニ】 108m\\t【コンビニ】 275m\\t【コンビニ】 469m     28\n",
       "【スーパー】 275m\\t【スーパー】 478m\\t【スーパー】 1118m\\t【コンビニ】 140m\\t【コンビニ】 153m\\t【コンビニ】 375m    25\n",
       "【スーパー】 702m\\t【スーパー】 789m\\t【スーパー】 959m\\t【コンビニ】 54m\\t【コンビニ】 195m                   24\n",
       "【スーパー】 422m\\t【スーパー】 442m\\t【スーパー】 686m\\t【コンビニ】 398m\\t【病院】 612m                    23\n",
       "【コンビニ】 100m\\t【コンビニ】 300m\\t【コンビニ】 410m\\t【スーパー】 10m\\t【幼稚園・保育園】 1800m\\t【公園】 330m    23\n",
       "【スーパー】 346m\\t【スーパー】 552m\\t【コンビニ】 238m\\t【コンビニ】 613m                               22\n",
       "Name: Building, dtype: int64"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train['Building'].value_counts().head(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 建物と距離をどう扱うかが問題になりそうです。\n",
    "- 住所が似たようなものは、周辺環境も似たようなものになるかと思います。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 一部変数は似たようなことになるので省略しました。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. Feature Engineering\n",
    "\n",
    "- ここでは、前処理不要な簡単なもののみ作ります。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "def makeCountFull(train, test, categorical_features=None, report=True):\n",
    "    add_cols = categorical_features\n",
    "    if report:\n",
    "        print('add_cols: ', add_cols)\n",
    "    for add_col in add_cols:\n",
    "        train[add_col + '_countall'] = train[add_col].map(pd.concat([train[add_col], test[add_col]], ignore_index=True).value_counts(dropna=False))\n",
    "        test[add_col + '_countall'] = test[add_col].map(pd.concat([train[add_col], test[add_col]], ignore_index=True).value_counts(dropna=False))\n",
    "    return train, test"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "add_cols:  ['Place', 'Access', 'Room', 'Passed', 'Angle', 'Area', 'Floor', 'Bath', 'Kitchen', 'Internet', 'Facility', 'Parking', 'Building', 'Material', 'Contract']\n"
     ]
    }
   ],
   "source": [
    "cat_features = ['Place', 'Access', 'Room', 'Passed', 'Angle', 'Area', 'Floor', 'Bath', 'Kitchen', 'Internet', 'Facility', 'Parking', 'Building', 'Material', 'Contract']\n",
    "train, test = makeCountFull(train, test, cat_features)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- trainとtestを同時にCountしています。\n",
    "    - 別個にCountしてみると面白いかもしれません。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "cat_cols = ['Place', 'Access', 'Room', 'Passed', 'Angle', 'Area', 'Floor', 'Bath',\n",
    "            'Kitchen', 'Internet', 'Facility', 'Parking', 'Building', 'Material', 'Contract']\n",
    "for col in cat_cols:\n",
    "    train[col] = train[col].astype(str)\n",
    "    test[col] = test[col].astype(str)\n",
    "    le = LabelEncoder()\n",
    "    le.fit(list(train[col])+list(test[col]))\n",
    "    train[col] = le.transform(train[col])\n",
    "    test[col]    = le.transform(test[col])    \n",
    "    train[col] = train[col].astype('category')\n",
    "    test[col] = test[col].astype('category')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. Model\n",
    "\n",
    "- モデルを作成します。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5-1. Model training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = train.drop(['id', 'target'], axis=1)\n",
    "y = train['target']\n",
    "X_test = test.drop(['id'], axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 特に理由なくLightGBMを使っています。\n",
    "- パラメータはチューニングしていません。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training until validation scores don't improve for 200 rounds.\n",
      "[200]\ttraining's rmse: 33690.1\tvalid_1's rmse: 43046.7\n",
      "[400]\ttraining's rmse: 23656.7\tvalid_1's rmse: 38878.2\n",
      "[600]\ttraining's rmse: 18403.8\tvalid_1's rmse: 37603.5\n",
      "[800]\ttraining's rmse: 15028.1\tvalid_1's rmse: 36927.5\n",
      "[1000]\ttraining's rmse: 12524.6\tvalid_1's rmse: 36518.9\n",
      "[1200]\ttraining's rmse: 10561.7\tvalid_1's rmse: 36265.6\n",
      "[1400]\ttraining's rmse: 8990.44\tvalid_1's rmse: 36035.4\n",
      "[1600]\ttraining's rmse: 7741.07\tvalid_1's rmse: 35899.1\n",
      "[1800]\ttraining's rmse: 6707.87\tvalid_1's rmse: 35755.5\n",
      "[2000]\ttraining's rmse: 5846.19\tvalid_1's rmse: 35648.1\n",
      "[2200]\ttraining's rmse: 5132.23\tvalid_1's rmse: 35554.2\n",
      "[2400]\ttraining's rmse: 4513.1\tvalid_1's rmse: 35464.6\n",
      "[2600]\ttraining's rmse: 3995.28\tvalid_1's rmse: 35403.1\n",
      "[2800]\ttraining's rmse: 3536.49\tvalid_1's rmse: 35337.1\n",
      "[3000]\ttraining's rmse: 3159.48\tvalid_1's rmse: 35302.6\n",
      "[3200]\ttraining's rmse: 2819.36\tvalid_1's rmse: 35260.9\n",
      "[3400]\ttraining's rmse: 2535.11\tvalid_1's rmse: 35221.2\n",
      "[3600]\ttraining's rmse: 2278.16\tvalid_1's rmse: 35197.7\n",
      "[3800]\ttraining's rmse: 2064.64\tvalid_1's rmse: 35170.6\n",
      "[4000]\ttraining's rmse: 1876.22\tvalid_1's rmse: 35155.1\n",
      "[4200]\ttraining's rmse: 1706.98\tvalid_1's rmse: 35133.5\n",
      "[4400]\ttraining's rmse: 1559.82\tvalid_1's rmse: 35117.1\n",
      "[4600]\ttraining's rmse: 1422.72\tvalid_1's rmse: 35097.9\n",
      "[4800]\ttraining's rmse: 1308.24\tvalid_1's rmse: 35087.1\n",
      "[5000]\ttraining's rmse: 1202.28\tvalid_1's rmse: 35076.5\n",
      "Did not meet early stopping. Best iteration is:\n",
      "[5000]\ttraining's rmse: 1202.28\tvalid_1's rmse: 35076.5\n",
      "RMSE: 35076.52504457393\n"
     ]
    }
   ],
   "source": [
    "y_pred = np.zeros(X_test.shape[0], dtype='float32')\n",
    "train_pred = np.zeros(X.shape[0], dtype='float32')\n",
    "\n",
    "cv_score = 0\n",
    "X_train, X_valid, y_train, y_valid = train_test_split(X, y, random_state=0)\n",
    "train_data = lgb.Dataset(X_train, y_train)\n",
    "valid_data = lgb.Dataset(X_valid, y_valid)\n",
    "params = {\n",
    "    'objective': 'regression',\n",
    "    'metric': 'rmse',\n",
    "    'learning_rate': 0.01,\n",
    "    'max_depth': -1,\n",
    "    'num_leaves': 255,\n",
    "    'max_bin': 255,\n",
    "    'colsample_bytree': 0.8,\n",
    "    'subsample': 0.8,\n",
    "    'nthread': -1,\n",
    "    'bagging_freq': 1,\n",
    "    'verbose': -1,\n",
    "    'seed': 1,\n",
    "}\n",
    "model = lgb.train(params, train_data, valid_sets=[train_data, valid_data],\n",
    "                  num_boost_round=5000, early_stopping_rounds=200,\n",
    "                  verbose_eval=200)\n",
    "\n",
    "y_val_pred = model.predict(X_valid)\n",
    "val_score = np.sqrt(mean_squared_error(y_valid, y_val_pred))\n",
    "print('RMSE:', val_score)\n",
    "\n",
    "y_pred += model.predict(X_test, num_iteration=model.best_iteration)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "35076.52504457393\n"
     ]
    }
   ],
   "source": [
    "cv_score += val_score\n",
    "print(cv_score)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- （Validationを使ってtestの評価云々は非常に敏感な話題なので、一概に言えるものではないと思いますが）大体、36000+あたりのスコアになりそうです。\n",
    "    - スコアボードでは40000程度のスコアになりました。\n",
    "        - バリデーションはきちんと行いましょう。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5-2. Feature importance"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>feature</th>\n",
       "      <th>importance</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>Area_countall</td>\n",
       "      <td>145543</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>Facility_countall</td>\n",
       "      <td>95022</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>Floor_countall</td>\n",
       "      <td>92243</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>Passed_countall</td>\n",
       "      <td>84047</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>Place_countall</td>\n",
       "      <td>79280</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>Parking_countall</td>\n",
       "      <td>73624</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>Kitchen_countall</td>\n",
       "      <td>62007</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>Bath_countall</td>\n",
       "      <td>61008</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Internet</td>\n",
       "      <td>57389</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>Room_countall</td>\n",
       "      <td>56645</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Passed</td>\n",
       "      <td>54217</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>Internet_countall</td>\n",
       "      <td>52362</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Kitchen</td>\n",
       "      <td>43886</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Floor</td>\n",
       "      <td>39744</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>Angle_countall</td>\n",
       "      <td>38620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Bath</td>\n",
       "      <td>37212</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>Building_countall</td>\n",
       "      <td>30689</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>Access_countall</td>\n",
       "      <td>30324</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Angle</td>\n",
       "      <td>28097</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>Room</td>\n",
       "      <td>21508</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>Contract_countall</td>\n",
       "      <td>20103</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>Material_countall</td>\n",
       "      <td>18917</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>Facility</td>\n",
       "      <td>17045</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>Parking</td>\n",
       "      <td>15502</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Area</td>\n",
       "      <td>7507</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>Material</td>\n",
       "      <td>2983</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Place</td>\n",
       "      <td>2462</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>Contract</td>\n",
       "      <td>1975</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>Building</td>\n",
       "      <td>38</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Access</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              feature  importance\n",
       "20      Area_countall      145543\n",
       "25  Facility_countall       95022\n",
       "21     Floor_countall       92243\n",
       "18    Passed_countall       84047\n",
       "15     Place_countall       79280\n",
       "26   Parking_countall       73624\n",
       "23   Kitchen_countall       62007\n",
       "22      Bath_countall       61008\n",
       "9            Internet       57389\n",
       "17      Room_countall       56645\n",
       "3              Passed       54217\n",
       "24  Internet_countall       52362\n",
       "8             Kitchen       43886\n",
       "6               Floor       39744\n",
       "19     Angle_countall       38620\n",
       "7                Bath       37212\n",
       "27  Building_countall       30689\n",
       "16    Access_countall       30324\n",
       "4               Angle       28097\n",
       "2                Room       21508\n",
       "29  Contract_countall       20103\n",
       "28  Material_countall       18917\n",
       "10           Facility       17045\n",
       "11            Parking       15502\n",
       "5                Area        7507\n",
       "13           Material        2983\n",
       "0               Place        2462\n",
       "14           Contract        1975\n",
       "12           Building          38\n",
       "1              Access           1"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "feature_importances = pd.DataFrame()\n",
    "feature_importances['feature'] = X.columns\n",
    "feature_importances['importance'] = model.feature_importance()\n",
    "feature_importances = feature_importances.sort_values(by='importance', ascending=False)\n",
    "feature_importances"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 今回の簡単なモデルでは、CountEncodingがかなり効いています。\n",
    "- そのままLabelEncodingしただけのInternetとPassedが効いているので、前処理はそこら辺から始めると良いかもしれません。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1ec3ec48390>"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x1152 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(16, 16))\n",
    "sns.barplot(data=feature_importances.head(50), x='importance', y='feature')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5-3. Model prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>target</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>31471</td>\n",
       "      <td>180644.656250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>31472</td>\n",
       "      <td>125228.585938</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>31473</td>\n",
       "      <td>74702.906250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>31474</td>\n",
       "      <td>49380.605469</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>31475</td>\n",
       "      <td>117579.796875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>31476</td>\n",
       "      <td>51928.968750</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>31477</td>\n",
       "      <td>81321.437500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>31478</td>\n",
       "      <td>82284.367188</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>31479</td>\n",
       "      <td>82127.078125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>31480</td>\n",
       "      <td>134087.359375</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      id         target\n",
       "0  31471  180644.656250\n",
       "1  31472  125228.585938\n",
       "2  31473   74702.906250\n",
       "3  31474   49380.605469\n",
       "4  31475  117579.796875\n",
       "5  31476   51928.968750\n",
       "6  31477   81321.437500\n",
       "7  31478   82284.367188\n",
       "8  31479   82127.078125\n",
       "9  31480  134087.359375"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "submit['target'] = y_pred\n",
    "submit.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    3.126200e+04\n",
       "mean     1.180088e+05\n",
       "std      6.223985e+04\n",
       "min      1.278439e+04\n",
       "25%      7.858586e+04\n",
       "50%      1.030596e+05\n",
       "75%      1.366316e+05\n",
       "max      1.221313e+06\n",
       "Name: target, dtype: float64"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "submit['target'].describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 平均は大体118000円、形式も問題なさそうです。\n",
    "    - １日３サブまでなので、indexやheaderやLeakageに気を付けましょう。\n",
    "    - （既に2回やりました）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "submit.to_csv('submit_kernel_01.csv', header=False, index=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 6. Next step"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 次にやることとして、以下のようなことが考えられます。\n",
    "    - 前処理\n",
    "        - ライブラリとしては、re, mojimoji等が役に立つと思います。\n",
    "        - 関数としては、re.split()が役に立つかもしれません。\n",
    "        - df['hogehgoe'] = df['hoge'].apply(lambda x: func(x))のようなものが役に立つかもしれません。\n",
    "    - EDA\n",
    "        - （良く分からないです。必要に応じて適宜やると良いと思います。）\n",
    "    - Feature Engineering\n",
    "        - 前処理終わると疎な属性が大量に出てくるので、木を使うならば何かしないといけない気がします。\n",
    "    - Validation\n",
    "        - KFoldか、適当な属性毎のGroupKFoldが良い気がしますが、議論の余地があると思います。\n",
    "    - Model\n",
    "        - LightGBMだけでなく、CatboostやNNも試す価値は十分にあると思います。\n",
    "    - Teaming\n",
    "        - 昨年のフォーラムを見るに余りKernelが無いようなので、知見を得る意味でもTeamingは良いかと思います。\n",
    "        - IEEE(kaggleのテーブルコンペ)があと3日で終わるので、そこら辺でスコアボードが一変するかと思います。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 追記. TrainとTestの違い\n",
    "\n",
    "- やっていて、微妙にTrainとTestの分布が違うような気がしたので検証しました。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "train['target'] = 1\n",
    "test['target'] = 0\n",
    "df = pd.concat([train, test])\n",
    "X = df.drop(['id', 'target'], axis=1)\n",
    "y = df['target']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training until validation scores don't improve for 200 rounds.\n",
      "[200]\ttraining's auc: 0.954007\tvalid_1's auc: 0.504055\n",
      "Early stopping, best iteration is:\n",
      "[7]\ttraining's auc: 0.733928\tvalid_1's auc: 0.505508\n",
      "AUC: 0.5055084488161163\n"
     ]
    }
   ],
   "source": [
    "X_train, X_valid, y_train, y_valid = train_test_split(X, y, random_state=0)\n",
    "train_data = lgb.Dataset(X_train, y_train)\n",
    "valid_data = lgb.Dataset(X_valid, y_valid)\n",
    "params = {\n",
    "    'objective': 'binary',\n",
    "    'metric': 'auc',\n",
    "    'learning_rate': 0.01,\n",
    "    'max_depth': -1,\n",
    "    'num_leaves': 255,\n",
    "    'max_bin': 255,\n",
    "    'colsample_bytree': 0.8,\n",
    "    'subsample': 0.8,\n",
    "    'nthread': -1,\n",
    "    'bagging_freq': 1,\n",
    "    'verbose': -1,\n",
    "    'seed': 1,\n",
    "}\n",
    "model = lgb.train(params, train_data, valid_sets=[train_data, valid_data],\n",
    "                  num_boost_round=5000, early_stopping_rounds=200,\n",
    "                  verbose_eval=200)\n",
    "\n",
    "y_val_pred = model.predict(X_valid)\n",
    "val_score =roc_auc_score(y_valid, y_val_pred)\n",
    "print('AUC:', val_score)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 気のせいでした。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
